1. Field of the Invention
The present invention relates generally to SCSI host adapters, and in particular to accessing a single SCB array associated with a SCSI host adapter for both Packetized and non-Packetized protocols.
2. Description of Related Art
Prior art parallel SCSI host adapters have utilized a hardware I/O control block array to store hardware I/O control blocks, e.g., a sequencer control block (SCB) array to store SCBs. A driver executing on a host system constructed each SCB. The driver constructed the SCB and placed all the information in the SCB that was required by the host adapter to deliver a command to a SCSI target and to execute that command.
The SCB included a storage site location in the SCB array for the SCB. When the storage site location was loaded in a SCB array pointer register in the host adapter, the storage site for the SCB in the SCB array was addressed. The SCB also included a command block (CDB) that was delivered by the host adapter to the SCSI target. See for example, commonly assigned U.S. Pat. No. 5,659,690 entitled “Programmably Configurable Host Adapter Integrated Circuit including a RISC Processor,” of Craig A. Stuber et al. issued on Aug. 19, 1997, which is incorporated wherein by reference in its entirety. See also, commonly assigned U.S. Pat. No. 5,625,800 entitled “A Sequencer Control Block Array External To A Host Adapter Integrated Circuit” of Michael D. Brayton et al. issued on Apr. 29, 1997, and U.S. Pat. No. 5,564,023 entitled “Method for Accessing A Sequencer Control Block By A Host Adapter Integrated Circuit” of B. Arlen Young issued on Oct. 8, 1996, each of which is incorporated herein by reference in its entirety.
Upon construction of the SCB by the driver, the SCB was transferred from the host system to the host adapter. Various techniques for transferring SCBs from a host system to a host adapter are known.
The prior art SCB array had 255 storage sites available. In particular, one byte was available for specifying an address of a storage location for a SCB within the SCB array. This limited the total number of storage sites to 256, but one storage address was required for an invalid address, and consequently only 255 storage sites in the SCB array had valid addresses.
For tagged queuing, the one-byte tag delivered to a tagged queuing SCSI target had a value equal to the number of the SCB array site containing the SCB for that SCSI target. At any given time, there can be a large number of SCBs in the SCB array for which commands have been delivered to the tagged queuing SCSI target.
When the tagged queuing SCSI target reconnected to the host adapter, the tagged queuing SCSI target returned the one-byte tag to identify the SCB that contained the command for which the target was reconnecting. The host adapter sequencer and/or hardware circuits used the one-byte tag, without modification, to identify the corresponding SCB in the SCB array. In particular, upon receiving the one-byte tag from the reconnecting target, the one-byte tag was simply loaded into the one-byte host adapter SCB array pointer register to access the appropriate SCB.
Non-Packetized SCSI tagged queuing is limited to one-byte tags. However, Packetized SCSI tagged queuing uses a two-byte tag. The same method can be used for a reconnecting target with the Packetized SCSI Protocol in that the two-byte tag is used as a two-byte pointer to the SCB storage site in the SCB array. This scheme increases that possible SCB array size to 65,535 storage sites. However, since SCB array sizes greater than two hundred fifty-six require two-byte pointers, there is a problem using such arrays with non-Packetized SCSI that has only a single byte tag.